#include"Dector.hpp"

//调用函数，识别装甲板,求装甲板速度
int main()
{                                                   //armor_blue.avi 可以识别蓝色
   cv::VideoCapture inputCap("/home/cwb/project/video/armor_red.avi"); //获取输入视频
   if (!inputCap.isOpened()) {
      std::cerr << "Error: Could not open video file." << std::endl;
        return -1;   // 检查是否捕获到输入视频,方便排查这部分是否有问题
    }
   double frameRate = inputCap.get(cv::CAP_PROP_FPS);  //利用VideoCapture类的get()方法求帧率，并赋值给frameRate，用于测速度
   std::vector<ArmorInfo> armors;      
   std::string Light_color;     //初始化灯条颜色，用于判断红色蓝色
   while(true)  //循环读取视频的每一帧
   {
   cv::Mat image,roiImage,proimage,imagepro;  
   inputCap >> image;
   if (image.empty())
   {
      std::cerr << "Error: No frame read" << std::endl;
      return -1;   // 检查是否捕获到帧,方便排查这部分是否有问题
   }
   cv::Rect roiRect(180,350,1080,350);   //创建Rect对象roiRect，截取ROI区域
   roiImage=image(roiRect);   //利用ROI选取部分区域进行处理,减少其它干扰
   DetectOperation opera;    //创建类DetectOperation对象opera
   opera.findRedOrBlue(roiImage,proimage,Light_color);    //判断红蓝
   opera.imageProcess(proimage,imagepro);   //图像处理
   std::vector<std::vector<cv::Point>> contours;
   std::vector<cv::Vec4i> hierarchy;
   std::vector<LightDescriptor> lightInfos;
   cv::findContours(imagepro, contours, hierarchy, cv::RETR_TREE, cv::CHAIN_APPROX_SIMPLE);  //寻找轮廓
   opera.filterContours(contours,lightInfos);   //筛选轮廓
   opera.armorDetect(lightInfos,roiImage,Light_color,armors, frameRate);    //装甲板可视化，读取装甲板位置信息
   //显示装甲板二维速度
   for (ArmorInfo& armor : armors) {
      armor.velocity.showVelocity(image);   
   }
   showFPS(inputCap,image); //显示帧率
   cv::imshow("video",image);    //显示图像
   int key = cv::waitKey(30);   // 按下Esc键退出
   if (key == 27) { 
           break;
     }
   }
   inputCap.release(); // 释放视频捕获对象
   cv::destroyAllWindows(); // 销毁所有窗口
   return 0;
}